package org.csu.mypetstore.api.service.impl;

import org.csu.mypetstore.api.common.CommonResponse;
import org.csu.mypetstore.api.entity.Product;
import org.csu.mypetstore.api.persistence.ItemMapper;
import org.csu.mypetstore.api.pojo.Cart;
import org.csu.mypetstore.api.pojo.CartItem;
import org.csu.mypetstore.api.service.CartService;
import org.csu.mypetstore.api.service.CatalogService;
import org.csu.mypetstore.api.vo.AccountVO;
import org.csu.mypetstore.api.vo.CartItemVO;
import org.csu.mypetstore.api.vo.CartVO;
import org.csu.mypetstore.api.vo.ItemVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpSession;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Service("cartService")
public class CartServiceImpl implements CartService {

    @Autowired
    private CatalogService catalogService;


    @Override
    public CommonResponse<CartVO> viewCart(HttpSession session) {
        Cart cart = (Cart)session.getAttribute("cart");
        if (cart == null) {
            cart = new Cart();
            session.setAttribute("cart",cart);
        }
//        获取所有的CartItem
        List<CartItem> itemList = cart.getCartItemList();
//        显示的list
        List<CartItemVO> cartItemVOList = new ArrayList<>();

        BigDecimal totalCost = new BigDecimal(0);
        for(CartItem cartItem: itemList){
            CartItemVO cartItemVO = new CartItemVO();
            cartItemVO.setItemID(cartItem.getItem().getItemId());
            cartItemVO.setProductID(cartItem.getItem().getProductId());
            Product product = catalogService.getProductByProid(cartItem.getItem().getProductId()).getData();
            cartItemVO.setDescription(cartItem.getItem().getAttribute1() +" "+ product.getName());
            cartItemVO.setInStock(true);
            cartItemVO.setQuantity(cartItem.getQuantity());
            cartItemVO.setListPrice(cartItem.getItem().getListPrice());
            BigDecimal cost = cartItem.getItem().getListPrice().multiply(new BigDecimal(cartItem.getQuantity()));
            totalCost = totalCost.add(cost);
            cartItemVO.setTotalCost(cost);
            cartItemVOList.add(cartItemVO);
        }

        CartVO cartVO = new CartVO();
        cartVO.setItemVOList(cartItemVOList);
        cartVO.setTotalCost(totalCost);
        return CommonResponse.createForSuccess(cartVO);
    }

    @Override
    public CommonResponse<CartVO> addItemToCart(HttpSession session, String itemID) {
        Cart cart = (Cart)session.getAttribute("cart");
        if (cart == null) {
            cart = new Cart();
        }
//        添加商品到购物车
        cart.addItem(catalogService.getItemByItemid(itemID).getData(),true);
        session.setAttribute("cart",cart);
//        跳转到购物车
        return viewCart(session);
    }

    @Override
    public CommonResponse<CartVO> modifyItemQuantity(String itemId,int newQuantity, HttpSession session){
        Cart cart = (Cart)session.getAttribute("cart");
        cart.setQuantityByItemId(itemId,newQuantity);
        if (newQuantity < 1) {
            cart.removeItemById(itemId);
        }
        session.setAttribute("cart",cart);
        return viewCart(session);
    }

    @Override
    public CommonResponse<CartVO> deleteItemFromCart(String itemId,HttpSession session){
        Cart cart = (Cart)session.getAttribute("cart");
        cart.removeItemById(itemId);
        session.setAttribute("cart", cart);
        return viewCart(session);
    }
}
